﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MJM.SPP.EntidadesNegocio;
using MJM.CBD.Conn;
using System.Data;
using System.Data.SqlClient;

namespace MJM.SPP.AccesoDatos
{
    public class SubOpcionAD
    {
        public List<SubOpcionEN> Listar(int IDOpcionGeneral)
        {
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_SUBOPT_ListarXGeneral", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataReader dr;
            SqlParameter prmIdOpcion;
            List<SubOpcionEN> lst = new List<SubOpcionEN>();
            try
            {
                prmIdOpcion = cmd.CreateParameter();
                prmIdOpcion.ParameterName = "@vOPTGEN_P_inID";
                prmIdOpcion.SqlDbType = SqlDbType.Int;
                prmIdOpcion.Value = IDOpcionGeneral;
                cmd.Parameters.Add(prmIdOpcion);
                cmd.Connection.Open();
                dr = cmd.ExecuteReader();
                SubOpcionEN obj;
                while(dr.Read())
                {
                    obj = new SubOpcionEN();
                    obj.OPTGEN_P_inID = dr.GetInt32(1);
                    obj.SEGU_inFLAELI = dr.GetInt32(5);
                    obj.SUBOPT_chDESSOP = dr.GetString(3);
                    obj.SUBOPT_chNOMSOP = dr.GetString(2);
                    obj.SUBOPT_P_inID = dr.GetInt32(0);
                    obj.SUBOPT_chNOMASP = dr.GetString(4);
                    obj.Tipo = dr.GetString(6)[0];
                    obj.Codigo = dr.GetString(7);
                    obj.EnvParametro = dr.GetInt32(8);
                    obj.Activo = false;
                    obj.Editar = true;
                    obj.SUBOPT_chDIRURL = dr.GetString(9);
                    lst.Add(obj);
                }
                cmd.Connection.Close();
                conn.Dispose();
                cmd.Dispose();
            }
            catch(Exception ex)
            {
                conn.Dispose();
                cmd.Dispose();
                return lst;
            }
            return lst;
        }

        public SubOpcionEN Obtener(int idOpcion, int idModulo)
        {
            SubOpcionEN objSubOpcionEN = new SubOpcionEN();
            List<SubOpcionEN> lst = Listar(idModulo);
            for (int i = 0; i < lst.Count; i++)
            {
                if (lst[i].OPTGEN_P_inID == idOpcion)
                    objSubOpcionEN = lst[i];
            }
            return objSubOpcionEN;
        }       

        public int Insertar(SubOpcionEN obj)
        {
            int codigo = 0;
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_i_T_WEB_SUBOPT_Insertar", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmNombre, prmDescripcion, prmDireccion, prmidModulo,prmidOpcion,prmTipo,prmCodigo,prmParametro;
            try
            {
                prmDescripcion = cmd.CreateParameter();
                prmDescripcion.ParameterName = "@vSUBOPT_chDESSOP";
                prmDescripcion.SqlDbType = SqlDbType.VarChar;
                prmDescripcion.Value = obj.SUBOPT_chDESSOP;
                cmd.Parameters.Add(prmDescripcion);

                prmDireccion = cmd.CreateParameter();
                prmDireccion.ParameterName = "@vSUBOPT_chNOMASP";
                prmDireccion.SqlDbType = SqlDbType.VarChar;
                prmDireccion.Value = obj.SUBOPT_chNOMASP;
                cmd.Parameters.Add(prmDireccion);

                prmCodigo = cmd.CreateParameter();
                prmCodigo.ParameterName = "@vSUBOPT_chCODOPT";
                prmCodigo.SqlDbType = SqlDbType.VarChar;
                prmCodigo.Value = obj.Codigo;
                cmd.Parameters.Add(prmCodigo);

                prmNombre = cmd.CreateParameter();
                prmNombre.ParameterName = "@vSUBOPT_chNOMSOP";
                prmNombre.SqlDbType = SqlDbType.VarChar;
                prmNombre.Value = obj.SUBOPT_chNOMSOP;
                cmd.Parameters.Add(prmNombre);

                prmidModulo = cmd.CreateParameter();
                prmidModulo.ParameterName = "@vOPTGEN_P_inID";
                prmidModulo.SqlDbType = SqlDbType.Int;
                prmidModulo.Value = obj.OPTGEN_P_inID;
                cmd.Parameters.Add(prmidModulo);

                prmTipo = cmd.CreateParameter();
                prmTipo.ParameterName = "@vSUBOPT_chTIPOPT";
                prmTipo.SqlDbType = SqlDbType.Char;
                prmTipo.Value = obj.Tipo;
                cmd.Parameters.Add(prmTipo);

                prmParametro = cmd.CreateParameter();
                prmParametro.ParameterName = "@vSUBOPT_inFLAPAR";
                prmParametro.SqlDbType = SqlDbType.Int;
                prmParametro.Value = obj.EnvParametro;
                cmd.Parameters.Add(prmParametro);

                prmidOpcion = cmd.CreateParameter();
                prmidOpcion.Direction = ParameterDirection.ReturnValue;
                prmidOpcion.SqlDbType = SqlDbType.Int;
                cmd.Parameters.Add(prmidOpcion);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                codigo = Convert.ToInt32(prmidOpcion.Value);

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return codigo;
        }

        public int Modificar(SubOpcionEN obj)
        {
            int codigo = 0;
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_u_T_WEB_SUBOPT_Modificar", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmNombre, prmDireccion, prmDescripcion, prmEliminar, prmidOpcion, prmTipo, prmCodigo, prmParametro;
            try
            {
                prmDescripcion = cmd.CreateParameter();
                prmDescripcion.ParameterName = "@vSUBOPT_chDESSOP";
                prmDescripcion.SqlDbType = SqlDbType.VarChar;
                prmDescripcion.Value = obj.SUBOPT_chDESSOP;
                cmd.Parameters.Add(prmDescripcion);

                prmNombre = cmd.CreateParameter();
                prmNombre.ParameterName = "@vSUBOPT_chNOMSOP";
                prmNombre.SqlDbType = SqlDbType.VarChar;
                prmNombre.Value = obj.SUBOPT_chNOMSOP;
                cmd.Parameters.Add(prmNombre);

                prmCodigo = cmd.CreateParameter();
                prmCodigo.ParameterName = "@vSUBOPT_chCODOPT";
                prmCodigo.SqlDbType = SqlDbType.VarChar;
                prmCodigo.Value = obj.Codigo;
                cmd.Parameters.Add(prmCodigo);

                prmEliminar = cmd.CreateParameter();
                prmEliminar.ParameterName = "@vSEGU_inFLAELI";
                prmEliminar.SqlDbType = SqlDbType.Int;
                prmEliminar.Value = obj.SEGU_inFLAELI;
                cmd.Parameters.Add(prmEliminar);

                prmTipo = cmd.CreateParameter();
                prmTipo.ParameterName = "@vSUBOPT_chTIPOPT";
                prmTipo.SqlDbType = SqlDbType.Char;
                prmTipo.Value = obj.Tipo;
                cmd.Parameters.Add(prmTipo);

                prmParametro = cmd.CreateParameter();
                prmParametro.ParameterName = "@vSUBOPT_inFLAPAR";
                prmParametro.SqlDbType = SqlDbType.Int;
                prmParametro.Value = obj.EnvParametro;
                cmd.Parameters.Add(prmParametro);

                prmDireccion = cmd.CreateParameter();
                prmDireccion.ParameterName = "@vSUBOPT_chNOMASP";
                prmDireccion.SqlDbType = SqlDbType.VarChar;
                prmDireccion.Value = obj.SUBOPT_chNOMASP;
                cmd.Parameters.Add(prmDireccion);

                prmidOpcion = cmd.CreateParameter();
                prmidOpcion.ParameterName = "@vSUBOPT_P_inID";
                prmidOpcion.SqlDbType = SqlDbType.Int;
                prmidOpcion.Value = obj.SUBOPT_P_inID;
                cmd.Parameters.Add(prmidOpcion);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                codigo = 1;
                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                codigo = 0;
                cmd.Dispose();
                conn.Dispose();
            }
            return codigo;
        }

        public int Mover(int IdOpcion, int IdModulo)
        {
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_u_T_WEB_SUBOPT_CambOpc", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmIdOpcion, prmIdModulo;
            int result = 1;
            try
            {
                prmIdModulo = cmd.CreateParameter();
                prmIdModulo.ParameterName = "@vIdModulo";
                prmIdModulo.SqlDbType = SqlDbType.Int;
                prmIdModulo.Value = IdModulo;
                cmd.Parameters.Add(prmIdModulo);

                prmIdOpcion = cmd.CreateParameter();
                prmIdOpcion.ParameterName = "@vIdOpcion";
                prmIdOpcion.SqlDbType = SqlDbType.Int;
                prmIdOpcion.Value = IdOpcion;
                cmd.Parameters.Add(prmIdOpcion);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                result = 0;
                cmd.Dispose();
                conn.Dispose();
            }
            return result;
        }
    }
}
